#ifndef DATA_PROCESSOR_DEF_H_
#define DATA_PROCESSOR_DEF_H_

#include "data_processor_def.h"

/**
 *  初始化数据处理模块
 *  使用数据处理模块前必须先将其初始化
 */
void DPR_init(void);
/**
 *  向等待队列中添加一个数据段
 *  通过该方法向处理模块添加的数据段将会自动拷贝至模块内部缓存区，并自动完成相应格式转换
 *  通过该方法向处理模块添加的数据段并不会立即参与运算，而是等到下次调用excute()被使用
 *  通过该方法可用保证当前运算过程中数据源不会被修改
 *
 *  @param msgPtr : 发送的数据指针
 *  @param msgLen : 发送的数据长度
 */
void DPR_waitQ_post(void *msgPtr, uint32_t msgLen);
/**
 *  数据处理模块是否可用
 *  在调用excute()前务必保证数据处理模块可用，否则可能会导致计算结果错误
 *  模块在调用excute()是自动上锁，在excute()执行完成后自动解锁
 */
uint8_t DPR_available(void);
/**
 *  执行数据处理
 */
void DPR_excute(void);
/*
 * }
 */

/*
 * delegate function
 * @group {
 */
/**
 *  离床判定算法
 */
__weak bool DPR_is_leave(float valMaxABS, float diffMaxABS);
/**
 *  体动判定算法
 */
__weak bool DPR_is_move(float valMaxABS, float diffMaxABS);
/*
 * }
 */

/*
 * callback function
 * @group {
 */
/**
 *  检测到离床信号
 */
__weak void DPR_did_leave(void);
/**
 *  检测到体动信号
 */
__weak void DPR_did_move(void);
/*
 * }
 */
#endif // DATA_PROCESSOR_DEF_H_
